package controleur;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import vue.VueDuJeu;

/**
 * Controlleur implémentant KeyListener. Permet e gérer les actions à éffectuer lorsqu'une touche est pressée.
 */
public class EcouteurClavier implements KeyListener {

	//>>>Attributs
	private VueDuJeu vueJeu;

	//>>>Constructeur
	public EcouteurClavier(VueDuJeu vj) {
		vueJeu=vj;
	}

	//>>>Méthodes
	public void keyTyped(KeyEvent e) {}

	/**
	 * Méthode exécutée lorsqu'une touche est pressée.
	 */
	public void keyPressed(KeyEvent e) {
		int key = e.getKeyCode();

		switch (key) {
		//Touche "N" -> Nouvelle partie
		case KeyEvent.VK_N:
			vueJeu.initialiserPartie();
			vueJeu.getAnimator().start();
			break;
		
		//Touche "Espace" -> Pause/reprise
		case KeyEvent.VK_SPACE:
			if (vueJeu.getAnimator().isRunning()) {//Si le Timer est en marche,
				vueJeu.getAnimator().stop();//On met en pause le jeu
			}
			else {//Sinon,
				vueJeu.getAnimator().start();//On le redémarre
			}
			break;
			

		//Touche "K" -> Déplacer le doodler sur la gauche	
		case KeyEvent.VK_K:
			vueJeu.getDoodler().setXdir(-1);
			vueJeu.setGauche(true);
			vueJeu.setDroite(false);
			break;
		
		
		//Touche "M" -> Déplacer le doodler sur la droite
		case KeyEvent.VK_M:
			vueJeu.getDoodler().setXdir(1);
			vueJeu.setGauche(false);
			vueJeu.setDroite(true);
			break;
			
		//Touche "Échap" et "Q" -> Quitter le jeu
		case KeyEvent.VK_Q:
		case KeyEvent.VK_ESCAPE:
			System.exit(0);
			break;
			
		//Touche "I" -> On affiche les infos sur le jeu
		case KeyEvent.VK_I:
			if (vueJeu.isAfficherStats()) {
				vueJeu.setAfficherStats(false);
			}
			else {
				vueJeu.setAfficherStats(true);
			}
			break;
		default:
			break;
		}
	}

	/**
	 * Méthode exécutée lorsqu'un touche est relâchée
	 */
	public void keyReleased(KeyEvent e) {
		int key = e.getKeyCode();

		switch (key) {
		//Touches "K" et "M"
		case KeyEvent.VK_K:
		case KeyEvent.VK_M:
			this.vueJeu.getDoodler().setXdir(0);//On arrête le déplacement sur l'axe horizontal
			break;
		default:
			break;
		}
	}
}